package com.kaifamiao.enca;

public class Decimal {

    // 声明一个用来保存整数的字段
    private final int value; // 注意这里封装的是 int 类型的数值

    // 定义一个用来表示计数符号的数组
    private final char[] symbols = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

    // 声明一个可以接受单个整数值的构造方法
    public Decimal( int value ) {
        this.value = value ;
    }

    // 将整数 value 转换为 radix 进制的字符串形式
    private String toString( int radix ){
        if( radix < 2 || radix > 16 ) {
            throw new IllegalArgumentException("非法参数");
        }
        String s = "";
        int x = this.value;
        while ( x > 0 ) {
            int yu = x % radix; // 整除求余数
            x = x / radix ; // 整除求商
            // 以余数为 symbols 数组的下标获得相应的字符
            char ch = symbols[yu];
            s = ch + s ;
        }
        return s ;
    }

    // 获得整数 value 的二进制形式
    public String toBinaryString(){
        String binary = this.toString(2);
        System.out.println( "字符串长度: " + binary.length() );
        return "0b" + binary;
    }

    // 获得整数 value 的八进制形式
    public String toOctalString(){
        String octal = this.toString(8);
        return "0" + octal;
    }

    // 获得整数 value 的十六进制形式
    public String toHexString(){
        String hex = this.toString(16);
        return "0x" + hex;
    }

    public int toPrimitive(){
        return this.value;
    }

}
